home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
08 System Utilities
/
FLOST.BIN
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2019-04-13
|
9KB
|
293 lines
0 VS$="LOST FILE 64":REM CIS NAME 'FLOST.BIN'
1 REM--REWORKING OF 'LOST FILE' FROM B128 TO C64
2 NT=3:REM ERROR RETRIES
10 REM--CONVERTED TO BASIC 2.0 FOR UPLOADING TO CIS
100 PRINTCHR$(142):CS$="U"
103 PRINT"[147]"TAB(12)""VS$
105 PRINT" ******************************"
110 PRINT" * AID TO FINDING LOST FILE, *"
120 PRINT" * ESPECIALLY WHEN LOST THRU *"
122 PRINT" * 'SAVE-WITH-REPLACE' *"
130 PRINT" ******************************"
132 PRINT" * SEE ALSO 'FLOST.TXT' *"
134 PRINT" * AND 'FLOST.DOC' *"
140 PRINT" ******************************"
150 PRINT" INSERT DISK AND PRESS ANY KEY"
160 GETA$:IFA$=""THEN160
170 REM------------------------------
180 REM--SET PROGRAM CONSTANTS-------
190 REM------------------------------
200 SP$=" ":NL$=CHR$(0):HX$="0123456789ABCDEF"
210 XT=35:REM CHANGED FOR 1541
240 DIM A(255),T(255),S(255)
245 CR$=""
250 CH=8:D$="0":REM DEVICE 8 DRIVE 0
260 OPEN15,CH,15,"I"+D$:GOSUB 650
270 OPEN 2,CH,2,"#0":GOSUB 650
280 REM--------------------------------------------------------
290 REM--MAIN USER INPUT -----------------
300 REM--------------------------------------------------------
310 GOSUB40000
315 GETMN$:IFMN$=""THEN315
320 IFMN$="D"THENT=18:S=1:GOSUB5000:GOSUB10000:GOTO310
330 IFMN$="K"THENGOSUB6000:GOTO310
340 IFMN$="L"THENGOSUB7000:GOTO310
350 IFMN$="A"THENGOSUB8000:GOTO310
360 IFMN$="C"ANDCS$="U"THENPRINTCHR$(14);:CS$="L":GOTO315
370 IFMN$="C"ANDCS$="L"THENPRINTCHR$(142);:CS$="U": GOTO315
380 IFMN$="H"THENGOSUB9300:GOTO310
390 IFMN$="X"THENCLOSE1:CLOSE2:PRINT" . . . ENDING PROGRAM.":END
499 GOTO310
650 REM--ERROR ROUTINE---------------
652 INPUT#15,EN,EM$:IF EN=0 THEN RETURN
653 PRINT"[147]ERROR":END
660 INPUT#15,EN,EM$,ET,ES:IF EN=0 THEN RT=0:RETURN
665 RT=RT+1:IF RT<NT THEN RETURN
670 PRINT"DISK ERROR, CODE:"EN"[146] "EM$:PRINT" TRACK"ET" SECTOR"ES
675 PRINT"TRIED"NT"TIMES. PROBABLY SECTOR CANNOT BE READ CORRECTLY."
677 RETURN
800 REM------------------------------
801 REM--DECIMAL TO HEX------
802 REM------------------------------
810 REM EXPECTS N TO BE THE DECIMAL NUMBER
812 REM RETURNS A$ AS TWO BYTE HEX NUMBER
815 A$=""
820 A1=INT(N/16):A$=A$+MID$(HX$,A1+1,1)
830 A2=INT(N-16*A1):A$=A$+MID$(HX$,A2+1,1)
840 RETURN:REM-------------------------
5000 REM--------------------------------------------------------
5001 REM--LOAD TRACK AND SECTOR INTO DISK BUFFER----------------
5002 REM--------------------------------------------------------
5005 REM EXPECTS T,S TO BE TRACT AND SECTOR TO READ
5010 PRINT#15,"U1:2,"D$;T;S:GOSUB660:REM BLOCK-READ
5020 PRINT#15,"B-P:2,0"
5030 IFMN$="K"THENFORI=0TO1:GET#2,A$:A(I)=ASC(A$+CHR$(0)):NEXT:GOTO5100
5040 IFMN$="L"THENFORI=0TO3:GET#2,A$:A(I)=ASC(A$+CHR$(0)):NEXT:GOTO5100
5050 FOR I=0TO255:GET#2,A$:A(I)=ASC(A$+CHR$(0)):NEXT
5100 NT=A(0):NS=A(1):FT=A(2):BL=A(30):BH=A(31):SE=A(3):TR=A(4)
5200 RETURN
6000 REM--------------------------------------------------------
6001 REM--LINSKSTER--DISPLAY A CHAIN AND COUNT BLOCKS
6002 REM--------------------------------------------------------
6010 PRINT"---COUNT LINKED BLOCKS AND TOTAL-------
6020 [153]"WHICH TRACK":X$[178]"":[133]X$:[139]X$[178]""[167][142]
6025 T[178][197](X$)
6030 [153]"WHICH SECTOR":X$[178]"":[133]X$:[139]X$[178]""[167][142]
6040 S[178][197](X$)
6050 [141]9000:[139]EX[167]6020
6060 [143] IF ILLEGAL RANGE THEN PRINT MSG AND GOTO6000
6070 NB[178]0:[143] COUNTER
6080 [141]5000:[153]T"-"S;
6090 [139]NT[178]0[176]NS[178]255[167]6200:[143] EXIT IF ENDS CHAIN
6100 NB[178]NB[170]1
6120 T[178](NT):S[178]NS:[137]6080
6200 NB[178]NB[170]1:[153]:[153]NB"BLOCKS COUNTED":[142]
7000 [143]---------------------------------------------------
7001 [143]--LOADSTER
7002 [143]---------------------------------------------------
7005 [153]"-------FIND POSSIBLE FIRST BLOCKS------
7010 PRINT"ENTER STARTING TRACK":X$="":INPUTX$:IFX$=""THENRETURN
7020 SK=VAL(X$):IFSK<1THEN7000
7035 T=SK:GOSUB9000:IFEXTHEN7010
7040 PRINT"ENTER DECIMAL LOAD ADDRESS":X$="":INPUTX$:IFX$=""THENRETURN
7050 XX=VAL(X$):REM LOAD ADDRESS
7055 CC=0
7060 FORT=SK TO 35:REM CHANGED FOR 1541
7070 PRINT:PRINT"WORKING TRACK . . ."T
7080 IFT<18THENFORS=0TO20:GOTO7130
7090 IFT<25THENFORS=0TO18:GOTO7130
7100 IFT<31THENFORS=0TO17:GOTO7130
7110 IFT<36THENFORS=0TO16
7130 GOSUB5000
7140 LA=A(2)+256*A(3):IFLA=XXTHENPRINTT"-"S;:CC=CC+1:T(CC)=T:S(CC)=S
7150 NEXT:NEXT
7160 PRINT:PRINTCC"POSSIBILITIES"
7180 PRINT"HIT 'P' TO PRINT LIST TO PRINTER[146]"
7190 GETA$:IFA$=""THEN7190
7200 IFA$<>"P"THENRETURN
7210 OPEN4,4:PRINT#4,"LIST OF POSSIBLES:"
7220 FORQ=1TOCC:PRINT#4,S(Q):NEXT
7230 PRINT#4:CLOSE4
7300 RETURN
8000 REM---------------------------------------------------
8001 REM--SCAN BLOCKS--ASCII ONLY
8002 REM---------------------------------------------------
8005 PRINT"------------ASCII ONLY SCAN----------
8010 [153]"ENTER TRACK":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
8020 T[178][197](XX$):[139]T[177]35[167]8000:[143] CHANGE FOR 1541
8030 [153]"ENTER SECTOR":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
8040 S[178][197](XX$):[141]9000:[139]EX[167]8010
8050 [141]5000:[143] READ BLOCK
8060 [153]"TRACK"T"SECTOR"S"READS AS FOLLOWS":[153]"IN ASCII
8070 FORQ=2TO255
8080 IFA(Q)<32THENPRINT".";:GOTO8110
8090 IFA(Q)>90ANDA(Q)<193THENPRINT".";:GOTO8110
8095 IFA(Q)>218THENPRINT".";:GOTO8110
8100 PRINTCHR$(A(Q));
8110 NEXT
8120 IFA(0)=0ORA(1)=255THENPRINT:PRINT"NO CONTINUATION":GOTO8005
8130 PRINT:PRINT"WANT NEXT SECTOR (Y/N)?"
8140 GETA$:IFA$=""THEN8140
8150 IFA$<>"Y"THEN8000
8160 T=A(0):S=A(1):GOTO8050
9000 REM---------------------------------------------------
9001 REM -- CHECK FOR LEGAL RANGE
9002 REM---------------------------------------------------
9005 EX=0
9010 IF T>XTTHENPRINT"ERROR[146] TRACK TOO HIGH":EX=1:RETURN
9020 IF T=0THENPRINT"ERROR[146] NO TRACK ZERO!!":EX=1:RETURN
9030 IFT<18ANDS>20THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
9035 IFT<18THEN9100
9040 IFT<25ANDS>18THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
9045 IFT<25THEN9100
9050 IFT<31ANDS>17THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
9055 IFT<31THEN9100
9060 IFT<36ANDS>16THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
9100 RETURN
9300 REM--HEX AND ASCII SCAN
9305 PRINT"------------HEX AND ASCII SCAN---------
9310 [153]"ENTER TRACK":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
9320 T[178][197](XX$)
9330 [153]"ENTER SECTOR":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
9340 S[178][197](XX$):[141]9000:[139]EX[167]9300
9350 [141]5000:[153]"LOAD";
9410 [129]Q[178]0[164]127
9420 N[178]A(Q):[141]800:[153]A$" ";
9430 [139](Q[170]1)[173]8[178][181]((Q[170]1)[173]8)[167][153]
9440 [130]
9450 [153]"";CR$;
9460 [129]Q[178]0[164]127
9470 [139]A(Q)[179]32[167][153]".";:[137]9510
9480 [139]A(Q)[177]218[167][153]".";:[137]9510
9490 [139]A(Q)[177]90[175]A(Q)[179]193[167][153]".";:[137]9510
9500 [153][199](A(Q));
9510 [139](Q[170]1)[173]8[178][181]((Q[170]1)[173]8)[167][153]:[153]CR$;
9520 [130]
9530 [153]:[153]"ANY KEY FOR SECOND HALF (X ABORTS)
9540 GETA$:IFA$=""THEN9540
9542 IFA$="X"THEN9830
9545 PRINT"[147]";
9550 FORQ=128TO255
9560 N=A(Q):GOSUB800:PRINTA$" ";
9570 IF(Q+1)/8=INT((Q+1)/8)THENPRINT
9580 NEXT
9590 PRINT"";CR$;
9600 FORQ=128TO255
9610 IFA(Q)<32THENPRINT".";:GOTO9650
9620 IFA(Q)>218THENPRINT".";:GOTO9650
9630 IF(A(Q))>90AND(A(Q))<193THENPRINT".";:GOTO9650
9640 PRINTCHR$(A(Q));
9650 IF(Q+1)/8=INT((Q+1)/8)THENPRINT:PRINTCR$;
9660 NEXT
9830 PRINT:PRINT"TRACK"T"SECTOR"S
9840 IFNT=0ORNS=255THENPRINT"NO CONTINUATION[146] -- ";:GOTO9310
9850 PRINT"NEXT TRACK"NT"NEXT SECTOR"NS
9860 PRINT"WANT TO GO ON? (Y/N)
9870 [161]A$:[139]A$[178]""[167]9870
9880 [139]A$[179][177]"Y"[167]9310
9890 S[178]NS:T[178]NT:[137]9350
10000 [143]----------------------------------------
10001 [143]--DISPLAY AND FIX FIRST DIRECTORY ENTRY
10002 [143]----------------------------------------
10010 [153]"FIRST DIRECTORY ENTRY IS:"
10030 CC[178]2:
10040 [153]"FILE TYPE ";:N[178]A(CC):[141]800:[153]A$:CC[178]CC[170]1
10050 [153]" -- STARTS ON TRACK ";:[153]A(CC);:CC[178]CC[170]1
10060 [153]"--SECTOR ";:[153]A(CC):CC[178]CC[170]1
10070 [153]"FILENAMEWAIT: ";
10080 [129]I[178]CC[164]CC[170]15:N[178]A(I):[153][199](N);:[130]:CC[178]CC[170]16
10090 [153]" -- "
10100 [129]I[178]CC[164]CC[170]8:[130]:CC[178]CC[170]9
10110 [153]"BLOCKS THIS FILE: $ ";:
10120 N[178]A(CC):[141]800:[153]A$" ";:CC[178]CC[170]1:N[178]A(CC):[141]800:[153]A$:CC[178]CC[170]1
10130 [153]" TOTAL BLOCKS--> "A(CC[171]2)[170]256[172]A(CC[171]1)
10150 [143]PRINT"-----------------------------------------------
20000 REM INPUT
20005 PRINT" <<FIX-MENU[146]>>"
20020 PRINT" <C> TO CHANGE SOMETHING
20030 [153]" <X> TO EXIT TO MAIN MENU
20050 PRINT" <W> TO WRITE DIRECTORY BLOCK[146]
21000 [161]ZZ$:[139]ZZ$[178]""[167]21000
21020 [139]ZZ$[178][199](13)[167] [142]
21030 [139]ZZ$[178]"C"[167][141]22000
21040 [139]ZZ$[178]"X"[167][142]
21050 [139]ZZ$[178]"W"[167][141]30000:[153]"VALIDATING DISK":[152]15,"V0"
21060 [139]ZZ$[178]"W"[167][160]1:[160]2:[160]15:[128]
21888 [137]21000
21999 [142]
22000 [143]--CHANGE SOMETHING
22030 [153]"TO CHANGE WHICH
22100 PRINT"F[146]ILE TYPE -- S[146]TARTING TRK,SEC":PRINT"B[146]LOCKS THIS FILE -- EX[146]IT
22110 [161]RJ$:[139]RJ$[178]""[167]22110
22120 [139]RJ$[178]"F"[167]23000
22130 [139]RJ$[178]"S"[167]24000
22140 [139]RJ$[178]"B"[167]25000
22150 [139]RJ$[178]"X"[167]10000
22200 [137]22110
23000 [143]--CHANGE FILE TYPE
23010 [153]"ENTER PWAITROGRAM OR SWAITEQUENTIAL FILE
23020 GETQQ$:IFQQ$=""THEN23020
23030 IFQQ$<>"P"ANDQQ$<>"S"THENRETURN
23040 IFQQ$="P"THENX=130
23050 IFQQ$="S"THENX=129
23100 A(2)=X
23110 GOTO10000
24000 REM CHANGE STARTING TRACK, SECTOR
24010 PRINT"ENTER STARTING TRACK":QQ$="":INPUTQQ$:IFQQ$=""THENRETURN
24020 X=VAL(QQ$):IFX>77THENPRINT"ILLEGAL TRACK":GOTO24010
24030 IFX<1THENPRINT"ILLEGAL TRACK":GOTO24010
24040 IFFQ>8THENFQ=FQ-8:GOTO24040
24050 A(3)=X:SG=X
24060 PRINT"ENTER STARTING SECTOR":QQ$="":INPUTQQ$:IFQQ$=""THENRETURN
24070 X=VAL(QQ$):IFX>29THENPRINT"ILLEGAL SECTOR":GOTO24060
24075 IFX<1THENPRINT"ILLEGAL SECTOR":GOTO24060
24080 IFSG>39ANDX>27THENPRINT"ILLEGAL SECTOR":GOTO24060
24090 IFSG>53ANDX>25THENPRINT"ILLEGAL SECTOR":GOTO24060
24100 IFSG>64ANDX>23THENPRINT"ILLEGAL SECTOR":GOTO24060
24110 IFFQ>8THENFQ=FQ-8:GOTO24110
24120 A(4)=X
24130 GOTO10000
25000 REM -- CHANGE BLOCKS THIS FILE
25002 PRINT"ENTER NUMBER OF BLOCKS":QQ$="":INPUTQQ$:IFQQ$=""THENRETURN
25004 X=VAL(QQ$):IFX<1THENPRINT"ILLEGAL NUMBER":GOTO25002
25010 IFX>65535THENPRINT"ILLEGAL NUMBER":GOTO25002
25020 IFFFQ>8THENFQ=FQ-8:GOTO25020
25030 A(31)=INT(X/256)
25040 A(30)=X-256*A(31)
25050 GOTO10000
30000 REM--WRITE BLOCK
30010 PRINT"[147]THIS IS THE ONLY[146] DISK-WRITING ACTIVITY IN THIS PROGRAM."
30020 PRINT"ONCE DONE, IT IS NOT EASILY CHANGED,
30025 [153]"AND MAY TOTALLY TRASHWAIT THE DISK
30030 PRINT"IF INCORRECT.
30040 [153]:[153]"YOU SHOULD BE USING A BACKUPWAIT DISK
30045 PRINT"RATHER THAN THE ONE WITH THE ORIGINAL
30050 [153]"LOST FILE."
30060 [153]"IF THIS IS NOT THE CASE, PLEASE EXIT
30065 PRINT"THIS PROGRAM NOW[146] AND BACKUP THE DISK
30070 [153]"IN QUESTION. USE THE BACKUP FOR THIS
30080 PRINT"OPERATION, EVEN IF IT MEANS MORE WORK!!
30090 [153]"IF YOU WISH TO CONTINUE, ENTER THE WORD"
30095 [153]"'CONTINUE' AND <RETURN>.
30200 QQ$="":INPUTQQ$:IFQQ$<>"CONTINUE"THENPRINT"ABORTING[146]":END
30210 PRINT"ARE YOU SURE?[146]":QQ$="":INPUTQQ$:IFQQ$<>"Y"THENPRINT"ABORTING[146]":END
30300 REM------------------------
30301 REM-DISK WRITING MODULE *******
30302 REM------------------------
30400 PRINT#15,"B-P:2,0"
30410 FORQQ=0TO255:PRINT#2,CHR$(A(QQ));:NEXT
30420 REM WRITTEN TO DISK BUFFER
30430 PRINT#15,"B-P:2,0"
30450 PRINT#15,"U2:2,"D$;T;S:GOSUB660
30500 RETURN
40000 REM MAIN MENU
40010 PRINT" <<MAIN MENU[146]>>
40020 [153]"<D> FIX DIRECTORY
40030 PRINT"<L> FIND POSSIBLE FIRST BLOCKS
40040 [153]"<A> ASCII SCAN OF BLOCK
40050 PRINT"<K> CHAIN OF BLOCKS FROM A GIVEN POINT
40060 [153]"<H> ASCII ANDWAIT HEX SCAN OF BLOCK
40070 PRINT"<C> CHANGES CASE
40080 [153]"<X> TO QUIT
40100 RETURN